#ifndef CACELECENERMETER_H
#define CACELECENERMETER_H

#include <QObject>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QDateTime>
#include <QList>
#include <QDebug>
#include <QString>
#include <QChar>
#include <math.h>

class CACElecEnerMeter : public QSerialPort
{
    Q_OBJECT
public:
    explicit CACElecEnerMeter(QObject *parent = 0);
    explicit CACElecEnerMeter(const QSerialPortInfo &serialPortInfo, QObject *parent = nullptr);
    explicit CACElecEnerMeter(const QString &strPortName, QSerialPort::BaudRate baud,QObject *parent = 0);

    //对外接口
    float getCurrentEner() const;
    float getInitialEner() const;
    void setInitialEner(float initialEner);
    float getAPowerFactor() const;

    float getBPowerFactor() const;

    float getCPowerFactor() const;

    float getAllPowerFactor() const;

signals:
     void signalGetReady(); //接受一次有效数据就发送一次信号
public slots:
private:
    //字段
    float _currentEner; //当前电能
    float _initialEner; //初始电能
    float _aPowerFactor; //A功率因数
    float _bPowerFactor; //B功率因数
    float _cPowerFactor; //C功率因数
    float _allPowerFactor; //总功率因数
    void paraInit(); //初始化参数函数
    void dealRec(); //接受处理函数
};

#endif // CACELECENERMETER_H



/*
(1)  功率因数数据块
    FE FE FE FE 68 AA AA AA AA AA AA 68 11 04 33 32 39 35 B4 16
    FE FE FE FE 68 73 00 00 00 15 20 68 91 0C 33 32 39 35 33 43 33 43 32 32 32 32 9C 16    //48Byte
    解析：功能码33 32 39 35  ->02 06 FF 00  功率因数数据块
    33 43 ->10 00=1.000  总功率因素
    33 43 ->10 00=1.000  A功率因素
    32 32 ->ff ff=0               B功率因数
    32 32   B功率因数
(2) 读取电能
    FE FE FE FE 68 AA AA AA AA AA AA 68 11 04 33 33 34 33 AE 16
    FE FE FE FE 68 73 00 00 00 15 20 68 91 08 33 33 34 33 48 33 33 33 BF 16
    解析：33 33 34 33标识码  00 01 00 00：读取正向有功总能量（反向）
    33 33 34 33 7B 44 33 33 能量(-33)  00 00 11 48 00 01 00 00=》能量11.48Kw

(3) 读A相电流
    FE FE FE FE 68 AA AA AA AA AA AA 68 11 04 33 34 35 35 B2 16
    FE FE FE FE 68 73 00 00 00 15 20 68 91 07 33 34 35 35 33 33 33 7A 16
    解析：功能码33 34 35 35 ->02 02 01 00   A相电流
    33 33 33：->00 00 00=000.000 A
(4)  读A相电压：
    FE FE FE FE 68 AA AA AA AA AA AA 68 11 04 33 34 34 35 B1 16
    FE FE FE FE 68 73 00 00 00 15 20 68 91 06 33 34 34 35 6A 55 9E 16
    解析：功能码33 34 34 35->02 01 01 00      A相电压
    6A 55->22 37=223.7  V
(5)  瞬时A有功功率
    FE FE FE FE 68 AA AA AA AA AA AA 68 11 04 33 34 36 35 B3 16
    FE FE FE FE 68 73 00 00 00 15 20 68 91 07 33 34 36 35 33 33 33 7B 16  get_dianbiao_power
    解析：功能码33 34 36 35->02 03 01 00  瞬时A有功功率
     33 33 33->00 00 00 =00.0000kW
 *
 * ACSinglePhaseEnerMeter_RS485 ac = new ACSinglePhaseEnerMeter_RS485(2400, System.IO.Ports.Parity.Odd);
 * ac.PortName = "COM22";
 *
 *
 ***/
